import { VxeGridPropTypes, VxeTableDefines } from 'vxe-table'

/** 为列配置添加 filter 与 sortable 参数 */
const addColumnsParams = function (
  columns: VxeTableDefines.ColumnOptions<any>[]
  // options?: { panelOptions }
): VxeGridPropTypes.Columns {
  function processColumn(
    col: VxeTableDefines.ColumnOptions<any>
  ): VxeTableDefines.ColumnOptions<any> {
    if (col.children) {
      // 递归处理 children
      col.children = col.children.map(processColumn)
    } else {
      if (col.field && ['vxe-action'].includes(col.field)) {
        return col
      }
      // 只有在没有 children 的情况下才添加参数
      // const filtersOpts = Object.assign({}, options)
      col = {
        // 参数数 "column.cell-render" 与 "column.edit-render" 有冲突
        // cellRender: col.editRender ? undefined : { name: 'BasicCell' },
        // filters: [{ data: options ? filtersOpts : null }],
        // filterRender: { name: 'FilterPanel' },
        sortable: true,
        // todo: 会影响edit
        // type: 'html',
        // 处理formatter导出
        exportMethod: ({ $table, row, options: _options, column }) => {
          if (_options.original) return row[column.field]
          if (column.formatter) {
            return $table.getCellLabel(row, column.field) || ''
          }
          return row[column.field]
        },
        ...col
      }
    }
    return col
  }

  return columns.map(processColumn)
}

export { addColumnsParams }
